package com.fliangyun.nsa.nsamanage.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.mail.*;
import javax.mail.internet.*;
import java.util.Date;
import java.util.Properties;

/**
 * @author fuliangyun@139.com
 * @date 2025年04月22日
 * @description
 */
public class MailUtil {
    private static Logger logger = LoggerFactory.getLogger(MailUtil.class);

    /**
     * 发送邮件
     * @author fuliangyun@139.com
     * @date 2025/4/22 10:58
     * @param toMail
     * @param content
     * @return void
     */
    public static boolean sendMail(String toMail, String subject, String content) {
        try {
            String emailHost = "smtp.qiye.aliyun.com";       //发送邮件的主机
            String fromUser = "OA";           //发件人名称
            String fromEmail = "oa@fliangyun.com";  //发件人邮箱
            String authCode = "xsytgWCWFH5?";    //发件人邮箱授权码


            // 1：初始化默认参数
            Properties props = new Properties();
            props.put("mail.smtp.host", emailHost); // SMTP主机名
            props.put("mail.smtp.port", "25"); // 主机端口号
            props.put("mail.smtp.auth", "true"); // 是否需要用户认证
            props.put("mail.smtp.starttls.enable","true");
            props.put("mail.smtp.ssl.trust","*");

            //获取到邮箱会话,利用匿名内部类的方式,将发送者邮箱用户名和密码授权给jvm
            Session session = Session.getDefaultInstance(props, new Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(fromEmail, authCode);
                }
            });

            // 3：创建MimeMessage对象
            MimeMessage message = new MimeMessage(session);

            // 4：设置发件人、收件人、主题、（内容后面设置）
            String formName = MimeUtility.encodeWord(fromUser) + " <" + fromEmail + ">";
            InternetAddress from = new InternetAddress(formName);
            message.setFrom(from);
            InternetAddress to = new InternetAddress(toMail);
            message.setRecipient(Message.RecipientType.TO, to);
            // 主题
            message.setSubject(subject);
            //邮件发送时间
            message.setSentDate(new Date());

            // 5：设置一个多资源混合的邮件块 设置此类型时可以同时存在 附件和邮件内容  mixed代表混合
            MimeMultipart mixed = new MimeMultipart("mixed");

            MimeBodyPart textBody = new MimeBodyPart();
            textBody.setContent(content,"text/html;charset=UTF-8");
            mixed.addBodyPart(textBody);

            //===========================================================================================//

            // 6：设置我们处理好的资源（存放到Message）
            message.setContent(mixed);

            // 7：保存上面设置的邮件内容
            message.saveChanges();
            // 8：获取Transport对象
            Transport transport = session.getTransport();
            //9：smtp验证，就是你用来发邮件的邮箱用户名密码（若在之前的properties中指定默认值，这里可以不用再次设置）
            transport.connect(null, null, authCode);
            //10：发送邮件
            transport.sendMessage(message, message.getAllRecipients()); // 发送
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            logger.error(e.getMessage(), e);
        }
        return false;
    }
}
